package com.jumi.microservice.service;

import com.jumi.microservice.common.base.dto.ResponseResult;
import com.jumi.microservice.domain.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * - - - - - - - - - - - - - - -
 *
 * @author liuz
 * @date 2020/8/11 16:03
 * ToDoSomeThing
 * - - - - - - - - - - - - - - -
 */
@Api(tags = "商品sku库存相关服务接口")
@RequestMapping("/sku/inventory")
public interface GoodsInventoryApi {

    /**
     * 获取sku的库存信息
     *
     * @param list goodssku对象集合
     * @return
     */
    @ApiOperation(value = "获取sku的库存信息", notes = "获取sku的库存信息")
    @PostMapping("/goodsSkuInventoryList")
    List<GoodsSkuStockDTO> goodsSkuInventoryList(@RequestBody List<GoodsSkuStockDTO> list);

    /**
     * 保存商品sku库存信息
     *
     * @param supplySkuStockDTO 封装sku库存信息
     * @return
     */
    @PostMapping("/saveInventory")
    ResponseResult saveInventory(@RequestBody SupplySkuStockDTO supplySkuStockDTO);

    /**
     * 清除库存
     *
     * @param dto 商品sku库存dto
     */
    @PostMapping("/clearInventory")
    ResponseResult clearInventory(@RequestBody ClearSkuMaterialDTO dto);

    /**
     * 通过skuid获取sku的库存
     *
     * @param ids skuid集合
     * @return
     */
    @PostMapping(value = "/goodsInventoryBySkuIds")
    List<GoodsSpuInventoryDTO> goodsInventoryBySkuIds(@RequestBody List<Long> ids);

    /**
     * 通过spuid获取库存信息
     * 20210107 修改为按spuid获取销量
     *
     * @param spuId 商品spuid
     * @return
     */
    @PostMapping("/goodsInventoryBySpuId")
    List<GoodsSpuInventoryDTO> goodsInventoryBySpuId(List<Long> spuId);

    /**
     * 保存商品sku库存信息(第三方)
     *
     * @param goodsSkuStocks sku库存信息
     * @return
     */
    @PostMapping("/saveInventory4Third")
    ResponseResult saveInventory4Third(@RequestBody List<GoodsSkuStockDTO> goodsSkuStocks);

    /**
     * 根据spuid获取分仓信息
     *
     * @param goodsSkuStock 商品分仓集合
     * @return
     */
    @PostMapping(value = "getGoodsStockWare4OrderBySpuId")
    List<GoodsStockWareDTO> getGoodsStockWare4OrderBySpuId(@RequestBody GoodsSkuStockIdDTO goodsSkuStock);

    /**
     * 订单中-预售转真实
     *
     * @param wareAndGoodsSkus 仓库-sku信息集合
     * @return
     */
    @PostMapping(value = "pre2RealWareStock4Order")
    ResponseResult pre2RealWareStock4Order(@RequestBody WareAndSkuIdsDTO wareAndGoodsSkus);

    /**
     * 根据spuid获取spu的库存
     *
     * @param spuIds
     * @return
     */
    @PostMapping(value = "getGoodsSpuStockBySpuIds")
    GoodsSpuReturnDTO getGoodsSpuStockBySpuIds(@RequestBody List<Long> spuIds);

    /**
     * 根据skuid查询sku分仓明细数据
     *
     * @param skuId 商品skuId
     * @return 结果
     */
    List<SkuWarehouseStockDTO> listSkuWarehouseStockDetail(Long skuId);

    /**
     * 根据spuid集合查询库存
     *
     * @param spuIds 商品spuId集合
     * @return 结果
     */
    Map<Long,Integer> getSaledStorageBySpuIds(List<Long> spuIds);

    /**
     * 通过spuid获取库存信息
     * 20210107 修改为按spuid获取销量
     *
     * @param spuId 商品spuid
     * @return
     */
    List<GoodsSpuInventoryDTO> goodsInventoryBySpuId4Activity(List<Long> spuId);
}
